#include <cstdio>
#include <algorithm>
#include <queue>

using namespace std;

struct Node
{
    int id, d;
    Node( ) { }
    Node( int _id, int _d )
        : id( _id ), d( _d ) { }
};

bool operator < ( const Node &a, const Node &b )
{
    if ( a.d != b.d ) return a.d < b.d;
    return a.id > b.id;
}

Node a[ 50001 ], b[ 50001 ];
priority_queue<Node> q[ 101 ];
int n;

int main( )
{
    int t, i, j, cas = 1, maxn, k, k2;
    scanf("%d", &t);
    while ( t-- )
    {
        scanf("%d", &n);
        for ( i = 0; i < n; i++ )
        {
            scanf("%d%d", &a[ i ].d, &b[ i ].d);
            q[ b[ i ].d ].push( Node( i + 1, a[ i ].d ) );
        }
        printf("Case #%d:\n", cas++);
        for ( i = 0; i < n; i++ )
        {
            maxn = 0;
            for ( j = 1; j <= 100; j++ )
                if ( !q[ j ].empty( ) )
                {
                    if ( maxn < i * j + q[ j ].top( ).d || maxn == i * j + q[ j ].top( ).d && k > q[ j ].top( ).id )
                    {
                        maxn = i * j +q[ j ].top( ).d;
                        k = q[ j ].top( ).id;
                        k2 = j;
                    }
                }
            if ( i != 0 ) printf(" ");
            printf("%d", k);
            q[ k2 ].pop( );
            
        }
        puts("");
    }
    return 0;
}
